Amazon Connect チャットでアンケートの仕組みを作ってみた
Amazon Connect アドベントカレンダー 2024、11日目の記事です!
クラスメソッドとギークフィードさん、クラウドビルダーズさん、ネットプロテクションズさん、AWSJさんの有志が募ってチャレンジしている企画になります。
(アドベントカレンダーのカレンダー一覧はこちら↓)
はじめに
Amazon Connectのチャットを使い、アンケートを取る仕組みを考えてみました。
チャットでアンケート用のビューを顧客に表示しアンケートを取ります。
結果はLambdaからDynamoDBに保存します。
やってみた
前提条件
- Amazon Connectは構築済み
Amazon Connectの設定1
チャットの設定
洲崎さんのブログを参考にチャットの設定を行います。
ビューの作成
Amazno Connectコンソールにログインしルーティング > フロー > ビュー を開き、ビューを作成を選択します。
Formをドラッグ&ドロップで追加します。
Containerを2つドラッグ&ドロップで追加します。
Text BoxとRadio Groupを追加します。
Text Boxの内容を入力します。
Radio GroupのLabelとValueを入力します。
NameはQ1とQ2で別々の値を設定する必要があります。
Submit ButtonのLabelを変更します。
名前を入力し保存と公開を選択します。
DynamoDBの設定
以下の内容でDynamoDBを作成します。
パーティションキー:contact_id(文字列)
ソートキー:date(文字列)
Lambdaの設定
Lambda関数の作成
Lambda関数を作成します。
ランタイムはPython 3.13で作成します。
一般設定のタイムアウトを1分に変更します。
ロールに権限の追加
DynamoDBの記録用に以下の権限を追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"dynamodb:PutItem"
],
"Resource": "*"
}
]
}
コード
コード内のDynamoDBテーブル名を作成したDynamoDBテーブル名に変更します。
ビューから送信されるイベントのContactIdとアンケート結果のinput-1、input-2をDynamoDBに記録します。
import boto3
import datetime
import json
from datetime import timedelta
def lambda_handler(event, context):
# AWS クライアントの初期化
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('DynamoDBテーブル名')
# 現在の日時(JST)を取得
jst_time = datetime.datetime.now() + timedelta(hours=9)
current_date = jst_time.strftime('%Y-%m-%d')
# ContactIdの取得
contact_id = event['Details']['ContactData']['ContactId']
# inputの取得
view_result_data = json.loads(event['Details']['Parameters']['form']['ViewResultData'])
input_1 = view_result_data['input-1']
input_2 = view_result_data['input-2']
# DynamoDB のレコードを更新
table.put_item(
Item={
'date': current_date,
'contact_id': contact_id,
'Q1': input_1,
'Q2': input_2
}
)
Amazon Connectの設定2
Lambda関数の追加
作成したLambda関数をAmazon Connectに追加します。
AWSコンソール→Amazon Connect(対象のインスタンス)→問い合わせフローを開きます。
AWS Lambdaの項目で作成したLambda関数を選択し「+Add Lambda Function」を選択します。
コンタクトフローの作成
以下のフローを作成します。
ビューを表示ブロックに作成したビューを設定します。
Lambda 関数を呼び出すに作成したLambda関数と入力パラメータを設定します。
宛先キー:form
値:$.Views
ビューは「$.Views.ViewResultData」のように出力されます。
チャットのフロー変更
チャットに設定されているフローを作成したものに変更します。
対象のチャットを開き、編集を選択します。
チャットのコンタクトフローを作成したフローに変更します。
動作確認
チャットを開くとアンケートの入力フォームが表示されるので入力し送信します。
DynamoDBにアンケート結果が記録されました。
さいごに
Amazon Connectのチャットを使いアンケートを取る方法を考えてみました。
今回はDynamoDBに記録しましたが、SINさんのブログ([Amazon Connect] 電話アンケートの仕組みを作ってみた)のように集計した結果をS3に記録して可視化するとアンケートとしてよりよいものになりそうですね。